import { defineStore } from 'pinia';
// import Cookies from 'js-cookie';
import { Session } from '/@/utils/storage';
// import userImg from "/@/assets/images/hksj-icon-32.png"
import { useLoginApi } from '/@/api/login';
import { sortTreeArray } from '/@/utils/arrayOperation'
// import JSEncrypt from 'jsencrypt';
// import { useUserApi } from '/@/api/user';
/**
 * 用户信息
 * @methods setUserInfos 设置用户信息
 * @methods getApiUserInfo 账号密码登录
 * @methods getUserInfoByToken 通过token获取权限
 * @params userInfo 账号密码
 */
export const useUserInfo = defineStore('userInfo', {
  state: (): any => ({
    userInfos: {
      userId: '',
      userName: '',
      nickName: '', // 昵称
      photo: '',
      time: 0,
      roles: [],
      menus: [],
      authBtnList: [],
    },
    isOpenVerificationCode: false, // 是否开启了验证码校验
    // organization: {
    //   id: '',
    //   username: '',
    //   nickName: '',
    //   organizationId: 0,
    //   organizationName: '',
    //   deptId: '',
    //   deptName: '',
    //   postId: '',
    //   postName: '',
    //   postSort: null,
    //   phoneNumber: '',
    //   sex: ''
    // }
  }),
  actions: {
    async setUserInfos(userInfo?: any) {
      // 存储用户信息到浏览器缓存
      if (Session.get('token')) {
        this.userInfos = Session.get('userInfo'); // 数据持久化
        // this.organization = Session.get('organization');
      } else {
        if (userInfo) {
          const userInfos: any = await this.getApiUserInfo(userInfo);
          this.userInfos = userInfos
          Session.set('userInfo', userInfos); // 数据持久化

          // const organization: Array<any> = await this.getOrganIzaTion();//获取绑定机构
          // this.organization = organization[0];
          // Session.set('organization', organization[0]);
        } else {
          return;
        }
      }
      return this.userInfos;
    },
    // async getOrganIzaTion() {
    //   return new Promise((resolve) => {
    //     useUserApi().queryUserInfo().then((res: any) => {
    //       resolve(res.data);
    //     })
    //   })
    // },
    async getApiUserInfo(userInfo: { username: string, password: string, phone: string, verifyCode: string }) {
      // const crypt = new JSEncrypt();
      // crypt.setKey(import.meta.env.VITE_PUBLIC_kEY);

      return new Promise((resolve) => {
        useLoginApi().signIn(
          // {
          //   "username": userInfo.username,
          //   "password": crypt.encrypt(userInfo.password),
          // }
          userInfo
        ).then((res: any) => {
          this.isOpenVerificationCode = false
          // 此处token存在了cookies中
          Session.set('token', res.data.token);
          Session.set('userName', userInfo.username);
          const userName = Session.get('userName');

          // // 模拟数据
          // let defaultRoles: Array<string> = [];
          // let defaultAuthBtnList: Array<string> = [];
          // // admin 页面权限标识，对应路由 meta.roles，用于控制路由的显示/隐藏
          // let adminRoles: Array<string> = ['admin'];
          // // admin 按钮权限标识
          // let adminAuthBtnList: Array<string> = ['btn.add', 'btn.del', 'btn.edit', 'btn.link'];
          // // test 页面权限标识，对应路由 meta.roles，用于控制路由的显示/隐藏
          // let testRoles: Array<string> = [res.tag];
          // // test 按钮权限标识
          // let testAuthBtnList: Array<string> = ['btn.add', 'btn.link'];

          // 不同用户模拟不同的用户权限
          // if (res.tag === 'admin') {
          // 	defaultRoles = adminRoles;
          // 	defaultAuthBtnList = adminAuthBtnList;
          // } else {
          // 	defaultRoles = testRoles;
          // 	defaultAuthBtnList = testAuthBtnList;
          // }

          // 用户信息
          let userInfos = {
            userId: res.data.userInfo.id,
            userName: userName,
            nickName: res.data.userInfo.nickName,
            time: new Date().getTime(),
            roles: res.data.roles, // [res.tag],
            // menus: res.data.menus,
            menus: sortTreeArray(res.data.menus), // 菜单排序
            ...res.data.userInfo,
            // authBtnList: this.getUserBtnAuthByRole('admin'),
          };
          resolve(userInfos);

        }).catch((err: any) => {
          // 判断后端是否开启了验证码校验
          if (err.code == 390) {
            // 开启了验证码校验
            this.isOpenVerificationCode = true
            const userBasicInfo = {
              ...userInfo,
              phoneNumber: err.data
            }
            Session.set('userBasicInfo', userBasicInfo);
          }
        })
      });
    },

    // async getUserInfoByToken(token: string) {
    //   await useLoginApi().getUserInfoByToken({ name: token })
    //   // console.log(data, '通过token获取权限');
    // },

    // 获取通过角色获取用户权限列表
    // getUserBtnAuthByRole(role: string) {
    //   switch (role) {
    //     case 'admin': // 超级管理员
    //       return ['btn.add', 'btn.del', 'btn.edit', 'btn.link'];
    //       break;

    //     case 'afterSaleAdmin': // 售后管理人员
    //       return ['btn.add', 'btn.del', 'btn.edit', 'btn.link'];
    //       break;

    //     case 'commonAdmin': // 区域负责人
    //       return ['btn.add', 'btn.edit', 'btn.link'];
    //       break;

    //     case 'afterSale': // 售后人员
    //       return ['btn.link'];
    //       break;

    //     case 'demonstration': // 系统演示员
    //       return ['btn.add', 'btn.edit', 'btn.link'];
    //       break;

    //     case 'hospitalManager': // 医院负责人
    //       return ['btn.link'];
    //       break;

    //     default: // 默认
    //       return ['btn.link'];
    //       break;
    //   }
    // },
  },
});
